// ------------------------ atributos -----------------------

// array com os ids de modal Panels
var modalPanels = new Array();

// array padr�o para navega��o no modalPanel de erro
var camposErros = new Array();
camposErros[0] = "btnFechar";

// vari�vel base do sistema de navega��o *** NUNCA EXCLUA ISSO AQUI!!! ***
var i = 0;

// indica que array est� sendo usado na navega��o
var arrayAtivo = "campos";
// indica que array de descri��o est� sendo usado na navega��o
var arrayDescAtivo = "desccampos";

// arrays de navega��o e descri��o
var campos = new Array();
var desccampos = new Array();

// bot�es voltar das telas listar e detalhe *** RESPEITE ESTE PADR�O!!! ***
var detalhebtnvoltar = "frm:btnvoltar";
var listarbtnvoltar = "frmvoltar:btnvoltar";

var exec = 0;

// ------------------------- functions comuns --------------------------

// function que retorna o elemento pelo ID passado como argumento
function getElement(id) {
	try {
		return document.getElementById(id);
	} catch (e) {

		// alert('Elemento n�o encontrado!');
		return false;
	}
}

// function que coloca foco em um elemento pelo ID passado como argumento
function putFocus(id) {
	try {

		(getElement(id)).focus();

	} catch (e) {
		// alert('N�o foi poss�vel dar foco ao elemento!');
	}
}

function focoTabelaEndereco() {
	O$('frm:tabela').setSelectedRowIndex(1);
}

// function que clica em um elemento pelo ID passado como argumento
function doClick(id) {
	// alert(id);
	(getElement(id)).click();
}

// --------------- functions relacionadas a navega��o no modalPanel e entre
// telas

// function executada ao mostrar //o modalPanel de erros
function pushModal(idModal) {

	modalPanels.push(idModal);

}

// function que controla o fechamento de modalPanels e os bot�es voltar das
// telas
function fechar() {
	exec++;
	// alert('fechar..' + exec);
	if (modalPanels.length > 0) {

		// Richfaces.hideModalPanel(modalPanels.pop());

		Richfaces.hideModalPanel(modalPanels.pop());

		arrayAtivo = "campos";
		arrayDescAtivo = "desccampos";
		focoInicial();
		// alert('antes do return mp >0');
		return;
	}
	// alert('passou do mp > 0');
	try {

		doClick(listarbtnvoltar);
		return;

	} catch (e) {

		try {

			doClick(detalhebtnvoltar);

		} catch (e) {
			// alert('erro!')
		}

	}
}

// ------------- functions diretamente relacionadas � navega��o entre campos

// coloca o foco no primeiro elemento do array em uso
function focoInicial() {
	i = -1;
	next();
}

// function chamada pelas hotkeys - controla o fluxo de navega��o nos campos
function keysControl(key) {

	if (key == "up") {
		prev();
		return;
	}

	if (key == "down") {
		next();
		return;
	}

	if (key == "enter") {
		nextEnter();
		return;
	}

}

// coloca o foco no proximo campo se pressionada a tecla 'down'
function next() {

	if (arrayAtivo == '')
		return;

	var arr = eval(arrayAtivo);

	i++;

	if (i == arr.length) {
		i = 0;
		putFocus(arr[i]);
		return;
	}

	try {

		if (document.getElementById(arr[i]).disabled) {
			next();
		} else {
			putFocus(arr[i]);
		}

	} catch (e) {
		next();
	}
}

// coloca o foco no campo anterior
function prev() {

	if (arrayAtivo == '')
		return;

	var arr = eval(arrayAtivo);

	i--;

	if (i == -1) {
		i = arr.length - 1;
		putFocus(arr[i]);
		return;
	}

	try {

		if (document.getElementById(arr[i]).disabled) {
			prev();
		} else {
			putFocus(arr[i]);
		}

	} catch (e) {
		prev();
	}

}

// coloca o foco no proximo campo se pressionada a tecla 'return'
function nextEnter() {
	exec++;
	// alert('deu enter ' + exec);

	if (arrayAtivo == '')
		return;

	var arr = eval(arrayAtivo);

	if (document.getElementById(arr[i])) {
		if ((document.getElementById(arr[i]).type == "button")
				|| (document.getElementById(arr[i]).type == "submit")) {
			doClick(arr[i]);
			return;
		}
	}
	try {
		if (i == arr.length - 1) {
			i = 0;
			putFocus(arr[i]);
			return;
		}
		i++;

		if (document.getElementById(arr[i]).disabled) {
			nextEnter();
			return;
		} else {
			putFocus(arr[i]);
			return;
		}
	} catch (e) {
		if (i < 50) {
			nextEnter();
		}
	}
}

// --------------- functions relativas a valida��o de forms ---------
// evita acessos desnecess�rios ao servidor para validar
// o n�o preenchimento de campos o a valida��o dos mesmos

// function a ser chamada no bot�o confirma
function confirma() {

	// var arr = eval(arrayAtivo);
	var arr = campos;
	// var descArr = eval(arrayDescAtivo);
	var descArr = desccampos;

	var tamanho = arr.length;

	for (var j = 0; j < tamanho; j++) {

		var element = getElement(arr[j]);

		try {
			if (element.type == "button")
				continue;
		} catch (e) {
			continue;
		}

		if (element.className.indexOf("required") != -1) {
			if (!isFilled(element)) {
				alert("O campo " + descArr[j] + " deve ser preenchido!");
				element.focus();
				return false;
			}
		}

		if (element.className.indexOf("email") != -1) {
			if (!isEmail(element)) {
				alert("O campo "
						+ descArr[j]
						+ " deve ser preenchido com um endere�o de e-mail v�lido!");
				element.focus();
				return false;
			}
		}

		if (element.className.indexOf("valor_double") != -1) {
			if (!isFilledZero(element)) {
				alert("O campo " + descArr[j]
						+ " deve ser preenchido com um valor maior que zero!");
				element.focus();
				return false;
			}
		}

		if (element.className.indexOf("numero") != -1) {
			if (!isFilledZeroNumero(element)) {
				alert("O campo " + descArr[j] + " deve ser preenchido!");
				element.focus();
				return false;
			}
		}

		if (element.className.indexOf("site") != -1) {
			if (!isSite(element)) {
				alert("O campo " + descArr[j]
						+ " deve ser preenchido com um endereço válido!");
				element.focus();
				return false;
			}
		}

		if (element.className.indexOf("apenasnums") != -1) {
			if (!isApenasNums(element)) {
				alert("O campo " + descArr[j] + " deve conter apenas n�meros!");
				element.focus();
				return false;
			}
		}

		if (element.className.indexOf("apenasletras") != -1) {
			if (!isApenasLetras(element)) {
				alert("O campo " + descArr[j] + " deve conter apenas letras!");
				element.focus();
				return false;
			}
		}

		if (element.className.indexOf("codigoFiscal") != -1) {
			if (!isCodigoFiscal(element)) {
				alert("O campo " + descArr[j]
						+ " deve ser preenchido com um C�digo Fiscal v�lido!");
				element.focus();
				return false;
			}
		}

		if (element.className.indexOf("cnpj/cpf") != -1) {
			if (!isCnpjCpf(element)) {
				alert("O campo " + descArr[j]
						+ " deve ser preenchido com um Cnpj/Cpf v�lido!");
				element.focus();
				return false;
			}
			// alterado, erro valida��o cpf quando o resto do calculo do segundo
			// dig. era 10, considerar 0.
			if (!validateCnpjCpf(element)) {
				alert("O campo " + descArr[j]
						+ " deve ser preenchido com um Cnpj/Cpf v�lido!");
				element.focus();
				return false;

			}
			// if (element.className.indexOf("data") != -1) {
			// if (!validarData(element)) {
			// alert("O campo " + descArr[j]
			// + " deve ser preenchido com uma Data v�lida!");
			// element.focus();
			// return false;
			// }
			// }

		}
	}
	return confirm('Confirma ?');

}

// valida��o de cnpj e cpf
function validaCpfCnpj(nomecampo) {

	// var obj = getElement("frm:cnpj");
	var obj = getElement(nomecampo);

	if (obj.value.length <= 14) {

		return validarCPF(obj);
	}
	if (obj.value.length > 14 && obj.value.length <= 18) {

		return validarCNPJ(obj);
	}
}

function validarCPF(Objcpf) {
	var cpf = Objcpf.value;
	exp = /\.|\-/g;
	cpf = cpf.toString().replace(exp, "");
	var digitoDigitado = eval(cpf.charAt(9) + cpf.charAt(10));
	var soma1 = 0, soma2 = 0;
	var vlr = 11;
	var i;
	for (i = 0; i < 9; i++) {
		soma1 += eval(cpf.charAt(i) * (vlr - 1));
		soma2 += eval(cpf.charAt(i) * vlr);
		vlr--;
	}
	soma1 = (((soma1 * 10) % 11) == 10 ? 0 : ((soma1 * 10) % 11));
	soma2 = (((soma2 + (2 * soma1)) * 10) % 11) == 10 ? 0
			: (((soma2 + (2 * soma1)) * 10) % 11);

	var digitoGerado = (soma1 * 10) + soma2;

	if (digitoGerado != digitoDigitado) {
		alert('CPF Invalido!');
		Objcpf.value = '';
		return false;
	}
	return true;
}

// valida o CNPJ digitado
function validarCNPJ(ObjCnpj) {
	// alert('CNPJ...');
	var cnpj = ObjCnpj.value;
	var valida = new Array(6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2);
	var dig1 = new Number;
	var dig2 = new Number;

	cnpj = cnpj.toString().replace(".", "").replace(".", "").replace("-", "")
			.replace("/", "");

	if (cnpj == '00000000000000')
		return true;

	var digito = new Number(eval(cnpj.charAt(12) + cnpj.charAt(13)));

	for (var i = 0; i < valida.length; i++) {
		dig1 += (i > 0 ? (cnpj.charAt(i - 1) * valida[i]) : 0);
		dig2 += cnpj.charAt(i) * valida[i];
	}
	dig1 = (((dig1 % 11) < 2) ? 0 : (11 - (dig1 % 11)));
	dig2 = (((dig2 % 11) < 2) ? 0 : (11 - (dig2 % 11)));

	if (((dig1 * 10) + dig2) != digito) {
		alert('CNPJ Invalido!');
		ObjCnpj.value = '';
		return false;
	}
	return true;

}

function validateCnpjCpf(element) {
	if (element.value.length == 14)
		return validarCPF(element);

	if (element.value.length == 18)
		return validarCNPJ(element);

	return false;
}

function validarCamposEndereco() {

	var cep = document.getElementById("frmEndereco:cep_principal").value;
	var tipoEndereco = document.getElementById("frmEndereco:boxTipoEnd").value;
	var retorno = false;

	if ((tipoEndereco == null) || (tipoEndereco == '')) {
		alert('Tipo de Endere�o invalido');
		tipoEndereco.focus();
		return retorno;
	} else if ((cep == null) || (cep == '')) {
		alert('Preenchar um cep valido, e click em BUSCAR ENDERECO...');
		cep.focus();
		return retorno;
	} else {

		var endereco = document
				.getElementById('frmEndereco:iptenderecoprincipal').value;
		var bairroprincipal = document
				.getElementById('frmEndereco:bairroprincipal').value;
		var cidadeprincipal = document
				.getElementById('frmEndereco:cidadeprincipal').value;

		if ((endereco == null) || (endereco == '')) {
			alert('endereco invalido');
			endereco.focus();
			return retorno;
		}

		if ((bairroprincipal == null) || (bairroprincipal == '')) {
			alert('bairro invalido');
			bairroprincipal.focus();
			return retorno;
		}

		if ((cidadeprincipal == null) || (cidadeprincipal == '')) {
			alert('cidade invalido');
			cidadeprincipal.focus();
			return retorno;
		}

	}

}

function habilita() {
	rich: component('enter').enable();
}

function desabilita() {
	rich: component('enter').disable();
}

function textCounter(campo, countcampo, maxlimit) {
	if (campo.value.length > maxlimit) { // se passar do limite n�o deixar�
		campo.value = campo.value.substring(0, maxlimit);
	} else {
		countcampo.value = maxlimit - campo.value.length;
	}
}

function limpaFoco(parId) {
	var id = parId;
	if (typeof id == 'undefined' || id == null) {
		id = "frm:tabela";
	}
	if (O$(id) != null) {
		O$(id).setSelectedRowIndex(-1);
	}
}

function prepDetalhe(parId) {
	var id = parId;
	if (typeof id == 'undefined' || id == null) {
		id = "frm:tabela";
	}
	if (O$(id) == null || O$(id).getSelectedRowIndex() < 0) {
		return false;
	}
	return true;
}

function preparar(parId, msg) {
	var id = parId;
	if (typeof id == 'undefined' || id == null) {
		id = "frm:tabela";
	}

	if (O$(id).getSelectedRowIndex() < 0) {
		return false;
	}

	if (!confirm(msg)) {
		return false;
	}

	return true;
}

function prepExcluir(id, parMsg) {
	var msg = parMsg;
	if (typeof msg == 'undefined' || msg == null) {
		msg = 'Confirma Cancelamento/Exclus�o ?';
	}

	return preparar(id, msg);
}

function prepInativar(id, parMsg) {
	var msg = parMsg;
	if (typeof msg == 'undefined' || msg == null) {
		msg = 'Este registro ser� INATIVADO/ATIVADO!!! Deseja prosseguir ?';
	}

	return preparar(id, msg);

}

function prepLiberar(id, parMsg) {
	var msg = parMsg;
	if (typeof msg == 'undefined' || msg == null) {
		msg = 'Este registro ser� LIBERADO/DESLIBERADO!!! Deseja prosseguir ?';
	}

	return preparar(id, msg);

}

function focoTabela(idTabela, idPaginador) {

	var id = idTabela;
	idPaginador += 'dataScrollerRowIndex';

	if (typeof id == 'undefined' || id == null) {
		id = "frm:tabela";
	}

	if (O$(id) == null || O$(id).getRowCount() <= 0)
		return;

	if (O$(id).getSelectedRowIndex() >= 0) {
		O$(id).focus();
	} else {
		var x = 0;
		if (O$(idPaginador) != null) {
			x = O$(idPaginador).getAttribute('value');
		}
		O$(id).focus();
		O$(id).setSelectedRowIndex(parseInt(x));
	}
}

function updateRowKey(parId) {

	var id = parId;
	if (typeof id == 'undefined' || id == null) {
		id = "frm:tabela";
	}

	var index = O$(id).getSelectedRowIndex();
	if (index > 0)
		index--;

	return index;
}

function abrirModal(id) {
	Richfaces.showModalPanel(id);
}

function updateModal(id) {
	getElement(id);

}

function colocaValorParaNulo(campo, valor) {

	try {
		if ((O$(campo.id).value == null) || (O$(campo.id).value == "")) {
			getElement(campo.id).value = valor;
		}
	} catch (e) {
		try {
			if ((O$(campo).value == null) || (O$(campo).value == "")) {
				getElement(campo).value = valor;
			}
		} catch (e) {

		}
	}
}

function colocaNulo(campo, valor) {
	try {
		if ((O$(campo.id).value != null) && (O$(campo.id).value == valor)) {
			O$(campo.id).value = null;
		}
	} catch (e) {
		try {
			if ((O$(campo).value != null) && (O$(campo).value == valor)) {
				O$(campo).value = null;
			}
		} catch (e) {

		}
	}
}

function focoPrimeiraLinha(idForm, id) {

	if (idForm == '') {
		idForm = "frm";
	}

	if (getElement(idForm + ':' + id) != null) {
		getElement(idForm + ':' + id).setSelectedRowIndex(0);
		getElement(idForm + ':' + id).focus();
	}
}

function doSelect(campo) {
	try {
		(getElement(campo.id)).select();
	} catch (e) {
		try {
			(getElement(campo)).select();
		} catch (e) {

		}
	}
}

function desabilita(elem) {
	desBotao();
	// document.getElementById(elem.id).disabled = true;
}

function habilita(elem) {
	// document.getElementById(elem.id).disabled = false;
}

function sumir() {
	// var body=document.getElementsByTagName('body')[0];
	// body.style.display='none';
	desBotao();
}

function desBotao() {
	jQuery(".botao").attr("disabled", true);
	Richfaces.showModalPanel('modalLoad');
}

function habBotao() {
	jQuery(".botao").attr("disabled", false);
	Richfaces.hideModalPanel('modalLoad');
}

function desabilitaEnvioForm(event) {
	if (event.keyCode == 13 || event.charCode == 13 || event.wichCode == 13) {

		return false;
	}
	return true;
}
function fecharModal(componente) {
	if (args & amp & amp & !args.validationFailed) {
		PF(componente).hide();
	}

}

function validaDialog(args, dialogWidget, dialogId) {
	if (args.validationFailed || !args.sucesso) {

		$(PrimeFaces.escapeClientId(dialogId)).parent().effect("shake", {
			times : 3
		}, 100);

	} else {

		PF(dialogWidget).hide();

	}
}


/** testar* */
function arrumaEnter(field, event) {
	var keyCode = event.keyCode ? event.keyCode : event.which ? event.which
			: event.charCode;
	if (keyCode == 13) {
		var i;
		for (i = 0; i < field.form.elements.length; i++) {
			if (field == field.form.elements[i])
				break;
			i = (i + 1) % field.form.elements.length;
			field.form.elements[i].focus();
			return false;
		}
	} else
		return true;
}